/**
 * 文件上传控制器
 * 处理用户头像等文件上传功能
 */

const path = require('path');
const multer = require('multer');
const { logInfo, logError } = require('../logger');
const { User } = require('../models/User');

// 配置 multer 存储
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    // 确保 uploads 目录存在
    const uploadPath = path.join(__dirname, '../../uploads');
    cb(null, uploadPath);
  },
  filename: function (req, file, cb) {
    // 生成唯一文件名
    const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
    cb(null, 'avatar-' + uniqueSuffix + path.extname(file.originalname));
  }
});

// 文件过滤器 - 只允许图片文件
const fileFilter = (req, file, cb) => {
  // 检查文件类型
  if (file.mimetype.startsWith('image/')) {
    cb(null, true);
  } else {
    cb(new Error('只允许上传图片文件'), false);
  }
};

// 创建 multer 实例
const upload = multer({ 
  storage: storage,
  fileFilter: fileFilter,
  limits: {
    fileSize: 5 * 1024 * 1024 // 限制文件大小为 5MB
  }
});

/**
 * 上传用户头像
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
async function uploadAvatar(req, res) {
  try {
    // 检查是否有文件上传
    if (!req.file) {
      return res.status(400).json({
        success: false,
        message: '请选择要上传的文件'
      });
    }

    // 获取当前用户
    const user = req.user;
    
    // 构建文件访问 URL
    const fileUrl = `/uploads/${req.file.filename}`;
    
    // 更新用户头像 URL
    await User.update(
      { avatarUrl: fileUrl },
      { where: { id: user.id } }
    );
    
    logInfo('用户头像上传成功', { 
      userId: user.id, 
      filename: req.file.filename,
      url: fileUrl
    });
    
    // 返回成功响应
    return res.status(200).json({
      success: true,
      message: '头像上传成功',
      data: {
        url: fileUrl
      }
    });
  } catch (error) {
    logError('用户头像上传失败', { error: error.message });
    
    // 返回错误响应
    return res.status(500).json({
      success: false,
      message: '头像上传失败'
    });
  }
}

module.exports = {
  uploadAvatar,
  upload: upload.single('avatar') // 用于中间件
};